/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package feuerwehr;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author GundlaPe
 */
public class EinsatzDaten implements Comparable {
    
    public EinsatzDaten(String pk, String einsatznr, String beginn, String ende, String einsatz_str, String einsatz_ort, String einsatz_plz, String fahrzeug, String stichwort, String longitude, String latitude) {
        this.pk = pk;
        this.einsatznr = einsatznr;
        this.beginn = beginn;
        this.ende = ende;
        this.einsatz_str = einsatz_str;
        this.einsatz_plz = einsatz_plz;
        this.einsatz_ort = einsatz_ort;
        this.fahrzeug = fahrzeug;
        this.stichwort = stichwort;
        this.latitude = latitude;
        this.longitude = longitude;
    }
    
    public String getData(int col) {
        switch (col) {
            case 0: return einsatznr!=null?einsatznr:"";
            case 1: return beginn!=null?beginn:"";
            case 2: return ende!=null?ende:"";
            case 3: return einsatz_str!=null?einsatz_str:"";
            case 4: return einsatz_plz!=null?einsatz_plz:"";
            case 5: return einsatz_ort!=null?einsatz_ort:"";
            case 6: return fahrzeug!=null?fahrzeug:"";
            case 7: return stichwort!=null?stichwort:"";
            case 8: return latitude;
            case 9: return longitude;
        }
        return "----";
    }
    
    /**
     * Einlesen der EinsatzDaten in ein Array.
     * @param where Eine gültige where Einschränkung für t_einsatz
     * @return Ein Array mit Einsatzdaten
     */
    public static List<EinsatzDaten> readData(String where) {
        ArrayList al = new ArrayList();
        try {
            PreparedStatement ps = Feuerwehr.getConnection().prepareStatement("select pk, einsatznr, beginn, ende, einsatz_str, einsatz_ort, einsatz_plz, fk_stichwort, longitude, latitude from t_einsatz where " + where + " order by beginn");
            PreparedStatement ps2 = Feuerwehr.getConnection().prepareStatement("select bezeichnung from t_fahrzeug tf, t_e_fahrzeug tef where tf.pk=tef.fk_fahrzeug and tef.fk_einsatz=? order by 1");
            PreparedStatement ps3 = Feuerwehr.getConnection().prepareStatement("select bezeichnung from t_stichwort where pk = ?");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                String lpk = rs.getString("pk");
                String leinsatznr = rs.getString("einsatznr");
                
                Timestamp lbeginn1 = rs.getTimestamp("beginn");
                String lbeginn="";
                if (null != lbeginn1) {
                    lbeginn = Feuerwehr.formatDatum(lbeginn1, "dd.MM.yyyy HH:mm:ss");
                }
                Timestamp lende1 = rs.getTimestamp("ende"); 
                String lende="";
                if (null != lende1) {
                    lende = Feuerwehr.formatDatum(lende1, "dd.MM.yyyy HH:mm:ss");
                }
                
                String leinsatz_str = rs.getString("einsatz_str"); 
                String leinsatz_ort = rs.getString("einsatz_ort"); 
                String leinsatz_plz = rs.getString("einsatz_plz"); 
                int lfk_stichwort = rs.getInt("fk_stichwort"); 
                String llongitude = rs.getString("longitude"); 
                String llatitude = rs.getString("latitude"); 
                String lfahrzeug="";
                ps2.setString(1, lpk);
                ResultSet rs2 = ps2.executeQuery();
                while (rs2.next()) {
                    lfahrzeug = lfahrzeug + rs2.getString("bezeichnung") + " * ";
                }
                if (lfahrzeug.length() != 0) {
                    lfahrzeug = lfahrzeug.substring(0, lfahrzeug.length()-2);
                }
                rs2.close();
                String lstichwort="";
                ps3.setInt(1, lfk_stichwort);
                ResultSet rs3 = ps3.executeQuery();
                while (rs3.next()) {
                    lstichwort = rs3.getString("bezeichnung");
                }
                rs3.close();
                
                al.add(new EinsatzDaten(lpk, leinsatznr, lbeginn, lende, leinsatz_str, leinsatz_ort, leinsatz_plz, lfahrzeug, lstichwort, llongitude, llatitude));
            }
            rs.close();
            ps.close();            
            ps2.close();            
        } catch (SQLException exc) {
            System.err.println("ERROR[EinsatzDaten]: " + exc.toString());
        }
        return al;
    }
    
    /**
     * Einlesen der Long/Lat Daten und aufbereiten für Kartendienst (Pushpins!)
     * @param where Eine gültige where Einschränkung für t_einsatz
     * @return String mit Ortsdaten für PushPins
     */
    public static String readDataKarte(String where) {
        String ret = "markers=";
        try {
            PreparedStatement ps = Feuerwehr.getConnection().prepareStatement("select longitude, latitude from t_einsatz where " + where + " and latitude is not null");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                String llon = rs.getString("longitude");
                String llat = rs.getString("latitude");
                ret = ret + llat + "," + llon + ",red-pushpin|";
            }
            ret = ret.substring(0, ret.length()-1);
        } catch (SQLException exc) {
            System.err.println("ERROR[EinsatzDaten2]: " + exc.toString());
        }
        return ret;
    }

    public String getPK() {
        return pk;
    }
    
    /** 
     * Die Spalte zur Sortierung vorgegeben.
     * @param sortColumn Die Spalte
     */
    public static void setSortColumn(int sortColumn) {
        EinsatzDaten.sortColumn = sortColumn;
    }
    
    /**
     * Sortierung ermöglichen
     * @param t Das Objekt
     * @return 
     */
    @Override
    public int compareTo(Object t) {
        String s1 = getData(sortColumn);
        String s2 = ((EinsatzDaten)t).getData(sortColumn);
        
        if ((sortColumn == 1) || (sortColumn == 2))  {
            Timestamp t1 = Einsatz.getSQLDateFromString(s1, "dd.MM.yyyy");
            Timestamp t2 = Einsatz.getSQLDateFromString(s2, "dd.MM.yyyy");
            if (t1 == null )
                t1 = new Timestamp(new Date().getTime());
            if (t2 == null )
                t2 = new Timestamp(new Date().getTime());
            return t1.compareTo(t2);
        }
        return s1.compareTo(s2);
    }

    private static int sortColumn = 0;
    private final String pk;
    private final String einsatznr;
    private final String beginn;
    private final String ende;
    private final String einsatz_str;
    private final String einsatz_ort;
    private final String einsatz_plz;
    private final String fahrzeug;
    private final String stichwort;
    private final String latitude;
    private final String longitude;
}
